<!-- 
Flask-SQLAlchemy分页对象拥有强大的对象和 Bootstrap 中的分页 CSS 类,能够很轻易地就能在模板底部构建一个分页导航。
于是现在这个 Jinja2 宏的形式实现的分页导航。
这个宏创建了一个 Bootstrap 分页元素,即一个有特殊样式的无序列表
 -->

 <!-- pagination_widget 宏可放在 index.html 和 user.html 中的 _posts.html 模板后面 -->

<!-- Jinja2 宏的参数列表中不用加入 **kwargs 即可接收关键字参数。分页宏把接收到的所有关键字参数都传给了生成分页链接的 url_for() 方法。 -->
<!-- 13.2节：分页导航所用的宏也要做些改动。评论的分页导航链接也要加上 #comments 片段,因此在 post.html 模板中调用宏时,传入片段参数。于是下面的fragment=''和{{ fragment }}都是新增的 -->
{% macro pagination_widget(pagination, endpoint, fragment='') %}
<ul class="pagination">
    <!-- “上一页”链接。如果当前页是第一页,则为这个链接加上 disabled 类,禁用这个链接。 -->
    <li{% if not pagination.has_prev %} class="disabled"{% endif %}>
        <a href="{% if pagination.has_prev %}{{ url_for(endpoint, page=pagination.prev_num, **kwargs) }}{{ fragment }}{% else %}#{% endif %}">
            &laquo;
        </a>
    </li>

    <!--
    分页对象的iter_pages()迭代器返回的所有页面链接。
    这些页面被渲染成具有明确页数的链接,页数在 url_for() 的参数中指定。
    当前显示的页面使用 activeCSS 类高亮显示。
    页数列表中的间隔使用省略号表示。
    -->
    {% for p in pagination.iter_pages() %}
        {% if p %}
            {% if p == pagination.page %}
            <li class="active">
                <a href="{{ url_for(endpoint, page = p, **kwargs) }}{{ fragment }}">{{ p }}</a>
            </li>
            {% else %}
            <li>
                <a href="{{ url_for(endpoint, page = p, **kwargs) }}{{ fragment }}">{{ p }}</a>
            </li>
            {% endif %}
        {% else %}
        <li class="disabled"><a href="#">&hellip;</a></li>
        {% endif %}
    {% endfor %}
    
    <!-- “下一页”链接。如果当前页是最后一页,则为这个链接加上 disabled 类,禁用这个链接。 -->
    <li{% if not pagination.has_next %} class="disabled"{% endif %}>
        <a href="{% if pagination.has_next %}{{ url_for(endpoint, page=pagination.next_num, **kwargs) }}{{ fragment }}{% else %}#{% endif %}">
            &raquo;
        </a>
    </li>
</ul>
{% endmacro %}